package dominio;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import persistencia.PersistentObject;
import dto.ItemRemitoClienteTO;
import dto.ReferenciaRemitoClienteTO;

@Entity
@Table(name = "ReferenciaRemitoCliente")
public class ReferenciaRemitoCliente extends PersistentObject {
	private static final long serialVersionUID = 1L;

	@OneToOne
	@JoinColumn(name = "idOrdenPedido")
	private OrdenPedido ordenPedido;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinColumn(name = "idReferencia")
	private List<ItemRemitoCliente> items;

	public ReferenciaRemitoCliente() {
		items = new ArrayList<ItemRemitoCliente>();
	}

	public OrdenPedido getOrdenPedido() {
		return ordenPedido;
	}

	public void setOrdenPedido(OrdenPedido orden) {
		this.ordenPedido = orden;
	}

	public List<ItemRemitoCliente> getItems() {
		return items;
	}

	public void agregarItem(ItemRemitoCliente item) {
		items.add(item);
	}

	public ReferenciaRemitoClienteTO getDTO() {
		ReferenciaRemitoClienteTO dto = new ReferenciaRemitoClienteTO();
		dto.setId(id);
		if (ordenPedido != null)
			dto.setOrdenPedido(ordenPedido.getDTO());
		for (ItemRemitoCliente i : items)
			dto.agregarItem(i.getDTO());
		return dto;
	}

	public static ReferenciaRemitoCliente fromDTO(ReferenciaRemitoClienteTO dto) {
		if (dto == null)
			return null;
		ReferenciaRemitoCliente r = new ReferenciaRemitoCliente();
		r.setId(dto.getId());
		r.setOrdenPedido(OrdenPedido.fromDTO(dto.getOrdenPedido()));
		for (ItemRemitoClienteTO i : dto.getItems())
			r.agregarItem(ItemRemitoCliente.fromDTO(i));
		return r;
	}
}